{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Planar data classification with one hidden layer\n",
    "\n",
    "Welcome to your week 3 programming assignment. It's time to build your first neural network, which will have a hidden layer. You will see a big difference between this model and the one you implemented using logistic regression. \n",
    "\n",
    "**You will learn how to:**\n",
    "- Implement a 2-class classification neural network with a single hidden layer\n",
    "- Use units with a non-linear activation function, such as tanh \n",
    "- Compute the cross entropy loss \n",
    "- Implement forward and backward propagation\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1 - Packages ##\n",
    "\n",
    "Let's first import all the packages that you will need during this assignment.\n",
    "- [numpy](www.numpy.org) is the fundamental package for scientific computing with Python.\n",
    "- [sklearn](http://scikit-learn.org/stable/) provides simple and efficient tools for data mining and data analysis. \n",
    "- [matplotlib](http://matplotlib.org) is a library for plotting graphs in Python.\n",
    "- testCases provides some test examples to assess the correctness of your functions\n",
    "- planar_utils provide various useful functions used in this assignment"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Package imports\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from testCases import *\n",
    "import sklearn\n",
    "import sklearn.datasets\n",
    "import sklearn.linear_model\n",
    "from planar_utils import plot_decision_boundary, sigmoid, load_planar_dataset, load_extra_datasets\n",
    "\n",
    "%matplotlib inline\n",
    "\n",
    "np.random.seed(1) # set a seed so that the results are consistent"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2 - Dataset ##\n",
    "\n",
    "First, let's get the dataset you will work on. The following code will load a \"flower\" 2-class dataset into variables `X` and `Y`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "X, Y = load_planar_dataset() "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Visualize the dataset using matplotlib. The data looks like a \"flower\" with some red (label y=0) and some blue (y=1) points. Your goal is to build a model to fit this data. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nkgEhhBDCyf0/susIAB7VMQEAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x4cc6a20>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Visualize the data:\n",
    "plt.scatter(X[0, :], X[1, :], c=Y, s=40, cmap=plt.cm.Spectral);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You have:\n",
    "    - a numpy-array (matrix) X that contains your features (x1, x2)\n",
    "    - a numpy-array (vector) Y that contains your labels (red:0, blue:1).\n",
    "\n",
    "Lets first get a better sense of what our data is like. \n",
    "\n",
    "**Exercise**: How many training examples do you have? In addition, what is the `shape` of the variables `X` and `Y`? \n",
    "\n",
    "**Hint**: How do you get the shape of a numpy array? [(help)](https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.shape.html)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "'NoneType' object is not subscriptable",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-4-f0763f1f296c>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0mshape_X\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0mshape_Y\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mm\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mshape_X\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m  \u001b[1;31m# training set size\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      5\u001b[0m \u001b[1;31m### END CODE HERE ###\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m      6\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mTypeError\u001b[0m: 'NoneType' object is not subscriptable"
     ]
    }
   ],
   "source": [
    "### START CODE HERE ### (≈ 3 lines of code)\n",
    "shape_X = None\n",
    "shape_Y = None\n",
    "m = shape_X[1]  # training set size\n",
    "### END CODE HERE ###\n",
    "\n",
    "print ('The shape of X is: ' + str(shape_X))\n",
    "print ('The shape of Y is: ' + str(shape_Y))\n",
    "print ('I have m = %d training examples!' % (m))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Expected Output**:\n",
    "       \n",
    "<table style=\"width:20%\">\n",
    "  \n",
    "  <tr>\n",
    "    <td>**shape of X**</td>\n",
    "    <td> (2, 400) </td> \n",
    "  </tr>\n",
    "  \n",
    "  <tr>\n",
    "    <td>**shape of Y**</td>\n",
    "    <td>(1, 400) </td> \n",
    "  </tr>\n",
    "  \n",
    "    <tr>\n",
    "    <td>**m**</td>\n",
    "    <td> 400 </td> \n",
    "  </tr>\n",
    "  \n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3 - Simple Logistic Regression\n",
    "\n",
    "Before building a full neural network, lets first see how logistic regression performs on this problem. You can use sklearn's built-in functions to do that. Run the code below to train a logistic regression classifier on the dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# Train the logistic regression classifier\n",
    "clf = sklearn.linear_model.LogisticRegressionCV();\n",
    "clf.fit(X.T, Y.T);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can now plot the decision boundary of these models. Run the code below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false,
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "# Plot the decision boundary for logistic regression\n",
    "plot_decision_boundary(lambda x: clf.predict(x), X, Y)\n",
    "plt.title(\"Logistic Regression\")\n",
    "\n",
    "# Print accuracy\n",
    "LR_predictions = clf.predict(X.T)\n",
    "print ('Accuracy of logistic regression: %d ' % float((np.dot(Y,LR_predictions) + np.dot(1-Y,1-LR_predictions))/float(Y.size)*100) +\n",
    "       '% ' + \"(percentage of correctly labelled datapoints)\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Expected Output**:\n",
    "\n",
    "<table style=\"width:20%\">\n",
    "  <tr>\n",
    "    <td>**Accuracy**</td>\n",
    "    <td> 47% </td> \n",
    "  </tr>\n",
    "  \n",
    "</table>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Interpretation**: The dataset is not linearly separable, so logistic regression doesn't perform well. Hopefully a neural network will do better. Let's try this now! "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4 - Neural Network model\n",
    "\n",
    "Logistic regression did not work well on the \"flower dataset\". You are going to train a Neural Network with a single hidden layer.\n",
    "\n",
    "**Here is our model**:\n",
    "<img src=\"images/classification_kiank.png\" style=\"width:600px;height:300px;\">\n",
    "\n",
    "**Mathematically**:\n",
    "\n",
    "For one example $x^{(i)}$:\n",
    "$$z^{[1] (i)} =  W^{[1]} x^{(i)} + b^{[1] (i)}\\tag{1}$$ \n",
    "$$a^{[1] (i)} = \\tanh(z^{[1] (i)})\\tag{2}$$\n",
    "$$z^{[2] (i)} = W^{[2]} a^{[1] (i)} + b^{[2] (i)}\\tag{3}$$\n",
    "$$\\hat{y}^{(i)} = a^{[2] (i)} = \\sigma(z^{ [2] (i)})\\tag{4}$$\n",
    "$$y^{(i)}_{prediction} = \\begin{cases} 1 & \\mbox{if } a^{[2](i)} > 0.5 \\\\ 0 & \\mbox{otherwise } \\end{cases}\\tag{5}$$\n",
    "\n",
    "Given the predictions on all the examples, you can also compute the cost $J$ as follows: \n",
    "$$J = - \\frac{1}{m} \\sum\\limits_{i = 0}^{m} \\large\\left(\\small y^{(i)}\\log\\left(a^{[2] (i)}\\right) + (1-y^{(i)})\\log\\left(1- a^{[2] (i)}\\right)  \\large  \\right) \\small \\tag{6}$$\n",
    "\n",
    "**Reminder**: The general methodology to build a Neural Network is to:\n",
    "    1. Define the neural network structure ( # of input units,  # of hidden units, etc). \n",
    "    2. Initialize the model's parameters\n",
    "    3. Loop:\n",
    "        - Implement forward propagation\n",
    "        - Compute loss\n",
    "        - Implement backward propagation to get the gradients\n",
    "        - Update parameters (gradient descent)\n",
    "\n",
    "You often build helper functions to compute steps 1-3 and then merge them into one function we call `nn_model()`. Once you've built `nn_model()` and learnt the right parameters, you can make predictions on new data."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.1 - Defining the neural network structure ####\n",
    "\n",
    "**Exercise**: Define three variables:\n",
    "    - n_x: the size of the input layer\n",
    "    - n_h: the size of the hidden layer (set this to 4) \n",
    "    - n_y: the size of the output layer\n",
    "\n",
    "**Hint**: Use shapes of X and Y to find n_x and n_y. Also, hard code the hidden layer size to be 4."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# GRADED FUNCTION: layer_sizes\n",
    "\n",
    "def layer_sizes(X, Y):\n",
    "    \"\"\"\n",
    "    Arguments:\n",
    "    X -- input dataset of shape (input size, number of examples)\n",
    "    Y -- labels of shape (output size, number of examples)\n",
    "    \n",
    "    Returns:\n",
    "    n_x -- the size of the input layer\n",
    "    n_h -- the size of the hidden layer\n",
    "    n_y -- the size of the output layer\n",
    "    \"\"\"\n",
    "    ### START CODE HERE ### (≈ 3 lines of code)\n",
    "    n_x = None # size of input layer\n",
    "    n_h = None\n",
    "    n_y = None # size of output layer\n",
    "    ### END CODE HERE ###\n",
    "    return (n_x, n_h, n_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "X_assess, Y_assess = layer_sizes_test_case()\n",
    "(n_x, n_h, n_y) = layer_sizes(X_assess, Y_assess)\n",
    "print(\"The size of the input layer is: n_x = \" + str(n_x))\n",
    "print(\"The size of the hidden layer is: n_h = \" + str(n_h))\n",
    "print(\"The size of the output layer is: n_y = \" + str(n_y))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Expected Output** (these are not the sizes you will use for your network, they are just used to assess the function you've just coded).\n",
    "\n",
    "<table style=\"width:20%\">\n",
    "  <tr>\n",
    "    <td>**n_x**</td>\n",
    "    <td> 5 </td> \n",
    "  </tr>\n",
    "  \n",
    "    <tr>\n",
    "    <td>**n_h**</td>\n",
    "    <td> 4 </td> \n",
    "  </tr>\n",
    "  \n",
    "    <tr>\n",
    "    <td>**n_y**</td>\n",
    "    <td> 2 </td> \n",
    "  </tr>\n",
    "  \n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.2 - Initialize the model's parameters ####\n",
    "\n",
    "**Exercise**: Implement the function `initialize_parameters()`.\n",
    "\n",
    "**Instructions**:\n",
    "- Make sure your parameters' sizes are right. Refer to the neural network figure above if needed.\n",
    "- You will initialize the weights matrices with random values. \n",
    "    - Use: `np.random.randn(a,b) * 0.01` to randomly initialize a matrix of shape (a,b).\n",
    "- You will initialize the bias vectors as zeros. \n",
    "    - Use: `np.zeros((a,b))` to initialize a matrix of shape (a,b) with zeros."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# GRADED FUNCTION: initialize_parameters\n",
    "\n",
    "def initialize_parameters(n_x, n_h, n_y):\n",
    "    \"\"\"\n",
    "    Argument:\n",
    "    n_x -- size of the input layer\n",
    "    n_h -- size of the hidden layer\n",
    "    n_y -- size of the output layer\n",
    "    \n",
    "    Returns:\n",
    "    params -- python dictionary containing your parameters:\n",
    "                    W1 -- weight matrix of shape (n_h, n_x)\n",
    "                    b1 -- bias vector of shape (n_h, 1)\n",
    "                    W2 -- weight matrix of shape (n_y, n_h)\n",
    "                    b2 -- bias vector of shape (n_y, 1)\n",
    "    \"\"\"\n",
    "    \n",
    "    np.random.seed(2) # we set up a seed so that your output matches ours although the initialization is random.\n",
    "    \n",
    "    ### START CODE HERE ### (≈ 4 lines of code)\n",
    "    W1 = None\n",
    "    b1 = None\n",
    "    W2 = None\n",
    "    b2 = None\n",
    "    ### END CODE HERE ###\n",
    "    \n",
    "    assert (W1.shape == (n_h, n_x))\n",
    "    assert (b1.shape == (n_h, 1))\n",
    "    assert (W2.shape == (n_y, n_h))\n",
    "    assert (b2.shape == (n_y, 1))\n",
    "    \n",
    "    parameters = {\"W1\": W1,\n",
    "                  \"b1\": b1,\n",
    "                  \"W2\": W2,\n",
    "                  \"b2\": b2}\n",
    "    \n",
    "    return parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "n_x, n_h, n_y = initialize_parameters_test_case()\n",
    "\n",
    "parameters = initialize_parameters(n_x, n_h, n_y)\n",
    "print(\"W1 = \" + str(parameters[\"W1\"]))\n",
    "print(\"b1 = \" + str(parameters[\"b1\"]))\n",
    "print(\"W2 = \" + str(parameters[\"W2\"]))\n",
    "print(\"b2 = \" + str(parameters[\"b2\"]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Expected Output**:\n",
    "\n",
    "<table style=\"width:90%\">\n",
    "  <tr>\n",
    "    <td>**W1**</td>\n",
    "    <td> [[-0.00416758 -0.00056267]\n",
    " [-0.02136196  0.01640271]\n",
    " [-0.01793436 -0.00841747]\n",
    " [ 0.00502881 -0.01245288]] </td> \n",
    "  </tr>\n",
    "  \n",
    "  <tr>\n",
    "    <td>**b1**</td>\n",
    "    <td> [[ 0.]\n",
    " [ 0.]\n",
    " [ 0.]\n",
    " [ 0.]] </td> \n",
    "  </tr>\n",
    "  \n",
    "  <tr>\n",
    "    <td>**W2**</td>\n",
    "    <td> [[-0.01057952 -0.00909008  0.00551454  0.02292208]]</td> \n",
    "  </tr>\n",
    "  \n",
    "\n",
    "  <tr>\n",
    "    <td>**b2**</td>\n",
    "    <td> [[ 0.]] </td> \n",
    "  </tr>\n",
    "  \n",
    "</table>\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.3 - The Loop ####\n",
    "\n",
    "**Question**: Implement `forward_propagation()`.\n",
    "\n",
    "**Instructions**:\n",
    "- Look above at the mathematical representation of your classifier.\n",
    "- You can use the function `sigmoid()`. It is built-in (imported) in the notebook.\n",
    "- You can use the function `np.tanh()`. It is part of the numpy library.\n",
    "- The steps you have to implement are:\n",
    "    1. Retrieve each parameter from the dictionary \"parameters\" (which is the output of `initialize_parameters()`) by using `parameters[\"..\"]`.\n",
    "    2. Implement Forward Propagation. Compute $Z^{[1]}, A^{[1]}, Z^{[2]}$ and $A^{[2]}$ (the vector of all your predictions on all the examples in the training set).\n",
    "- Values needed in the backpropagation are stored in \"`cache`\". The `cache` will be given as an input to the backpropagation function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# GRADED FUNCTION: forward_propagation\n",
    "\n",
    "def forward_propagation(X, parameters):\n",
    "    \"\"\"\n",
    "    Argument:\n",
    "    X -- input data of size (n_x, m)\n",
    "    parameters -- python dictionary containing your parameters (output of initialization function)\n",
    "    \n",
    "    Returns:\n",
    "    A2 -- The sigmoid output of the second activation\n",
    "    cache -- a dictionary containing \"Z1\", \"A1\", \"Z2\" and \"A2\"\n",
    "    \"\"\"\n",
    "    # Retrieve each parameter from the dictionary \"parameters\"\n",
    "    ### START CODE HERE ### (≈ 4 lines of code)\n",
    "    W1 = None\n",
    "    b1 = None\n",
    "    W2 = None\n",
    "    b2 = None\n",
    "    ### END CODE HERE ###\n",
    "    \n",
    "    # Implement Forward Propagation to calculate A2 (probabilities)\n",
    "    ### START CODE HERE ### (≈ 4 lines of code)\n",
    "    Z1 = None\n",
    "    A1 = None\n",
    "    Z2 = None\n",
    "    A2 = None\n",
    "    ### END CODE HERE ###\n",
    "    \n",
    "    assert(A2.shape == (1, X.shape[1]))\n",
    "    \n",
    "    cache = {\"Z1\": Z1,\n",
    "             \"A1\": A1,\n",
    "             \"Z2\": Z2,\n",
    "             \"A2\": A2}\n",
    "    \n",
    "    return A2, cache"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "X_assess, parameters = forward_propagation_test_case()\n",
    "\n",
    "A2, cache = forward_propagation(X_assess, parameters)\n",
    "\n",
    "# Note: we use the mean here just to make sure that your output matches ours. \n",
    "print(np.mean(cache['Z1']) ,np.mean(cache['A1']),np.mean(cache['Z2']),np.mean(cache['A2']))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Expected Output**:\n",
    "<table style=\"width:55%\">\n",
    "  <tr>\n",
    "    <td> -0.000499755777742 -0.000496963353232 0.000438187450959 0.500109546852 </td> \n",
    "  </tr>\n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now that you have computed $A^{[2]}$ (in the Python variable \"`A2`\"), which contains $a^{[2](i)}$ for every example, you can compute the cost function as follows:\n",
    "\n",
    "$$J = - \\frac{1}{m} \\sum\\limits_{i = 0}^{m} \\large{(} \\small y^{(i)}\\log\\left(a^{[2] (i)}\\right) + (1-y^{(i)})\\log\\left(1- a^{[2] (i)}\\right) \\large{)} \\small\\tag{13}$$\n",
    "\n",
    "**Exercise**: Implement `compute_cost()` to compute the value of the cost $J$.\n",
    "\n",
    "**Instructions**:\n",
    "- There are many ways to implement the cross-entropy loss. To help you, we give you how we would have implemented\n",
    "$- \\sum\\limits_{i=0}^{m}  y^{(i)}\\log(a^{[2](i)})$:\n",
    "```python\n",
    "logprobs = np.multiply(np.log(A2),Y)\n",
    "cost = - np.sum(logprobs)                # no need to use a for loop!\n",
    "```\n",
    "\n",
    "(you can use either `np.multiply()` and then `np.sum()` or directly `np.dot()`).\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# GRADED FUNCTION: compute_cost\n",
    "\n",
    "def compute_cost(A2, Y, parameters):\n",
    "    \"\"\"\n",
    "    Computes the cross-entropy cost given in equation (13)\n",
    "    \n",
    "    Arguments:\n",
    "    A2 -- The sigmoid output of the second activation, of shape (1, number of examples)\n",
    "    Y -- \"true\" labels vector of shape (1, number of examples)\n",
    "    parameters -- python dictionary containing your parameters W1, b1, W2 and b2\n",
    "    \n",
    "    Returns:\n",
    "    cost -- cross-entropy cost given equation (13)\n",
    "    \"\"\"\n",
    "    \n",
    "    m = Y.shape[1] # number of example\n",
    "\n",
    "    # Compute the cross-entropy cost\n",
    "    ### START CODE HERE ### (≈ 2 lines of code)\n",
    "    logprobs = None\n",
    "    cost = None\n",
    "    ### END CODE HERE ###\n",
    "    \n",
    "    cost = np.squeeze(cost)     # makes sure cost is the dimension we expect. \n",
    "                                # E.g., turns [[17]] into 17 \n",
    "    assert(isinstance(cost, float))\n",
    "    \n",
    "    return cost"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "A2, Y_assess, parameters = compute_cost_test_case()\n",
    "\n",
    "print(\"cost = \" + str(compute_cost(A2, Y_assess, parameters)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Expected Output**:\n",
    "<table style=\"width:20%\">\n",
    "  <tr>\n",
    "    <td>**cost**</td>\n",
    "    <td> 0.692919893776 </td> \n",
    "  </tr>\n",
    "  \n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Using the cache computed during forward propagation, you can now implement backward propagation.\n",
    "\n",
    "**Question**: Implement the function `backward_propagation()`.\n",
    "\n",
    "**Instructions**:\n",
    "Backpropagation is usually the hardest (most mathematical) part in deep learning. To help you, here again is the slide from the lecture on backpropagation. You'll want to use the six equations on the right of this slide, since you are building a vectorized implementation.  \n",
    "\n",
    "<img src=\"images/grad_summary.png\" style=\"width:600px;height:300px;\">\n",
    "\n",
    "<!--\n",
    "$\\frac{\\partial \\mathcal{J} }{ \\partial z_{2}^{(i)} } = \\frac{1}{m} (a^{[2](i)} - y^{(i)})$\n",
    "\n",
    "$\\frac{\\partial \\mathcal{J} }{ \\partial W_2 } = \\frac{\\partial \\mathcal{J} }{ \\partial z_{2}^{(i)} } a^{[1] (i) T} $\n",
    "\n",
    "$\\frac{\\partial \\mathcal{J} }{ \\partial b_2 } = \\sum_i{\\frac{\\partial \\mathcal{J} }{ \\partial z_{2}^{(i)}}}$\n",
    "\n",
    "$\\frac{\\partial \\mathcal{J} }{ \\partial z_{1}^{(i)} } =  W_2^T \\frac{\\partial \\mathcal{J} }{ \\partial z_{2}^{(i)} } * ( 1 - a^{[1] (i) 2}) $\n",
    "\n",
    "$\\frac{\\partial \\mathcal{J} }{ \\partial W_1 } = \\frac{\\partial \\mathcal{J} }{ \\partial z_{1}^{(i)} }  X^T $\n",
    "\n",
    "$\\frac{\\partial \\mathcal{J} _i }{ \\partial b_1 } = \\sum_i{\\frac{\\partial \\mathcal{J} }{ \\partial z_{1}^{(i)}}}$\n",
    "\n",
    "- Note that $*$ denotes elementwise multiplication.\n",
    "- The notation you will use is common in deep learning coding:\n",
    "    - dW1 = $\\frac{\\partial \\mathcal{J} }{ \\partial W_1 }$\n",
    "    - db1 = $\\frac{\\partial \\mathcal{J} }{ \\partial b_1 }$\n",
    "    - dW2 = $\\frac{\\partial \\mathcal{J} }{ \\partial W_2 }$\n",
    "    - db2 = $\\frac{\\partial \\mathcal{J} }{ \\partial b_2 }$\n",
    "    \n",
    "!-->\n",
    "\n",
    "- Tips:\n",
    "    - To compute dZ1 you'll need to compute $g^{[1]'}(Z^{[1]})$. Since $g^{[1]}(.)$ is the tanh activation function, if $a = g^{[1]}(z)$ then $g^{[1]'}(z) = 1-a^2$. So you can compute \n",
    "    $g^{[1]'}(Z^{[1]})$ using `(1 - np.power(A1, 2))`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# GRADED FUNCTION: backward_propagation\n",
    "\n",
    "def backward_propagation(parameters, cache, X, Y):\n",
    "    \"\"\"\n",
    "    Implement the backward propagation using the instructions above.\n",
    "    \n",
    "    Arguments:\n",
    "    parameters -- python dictionary containing our parameters \n",
    "    cache -- a dictionary containing \"Z1\", \"A1\", \"Z2\" and \"A2\".\n",
    "    X -- input data of shape (2, number of examples)\n",
    "    Y -- \"true\" labels vector of shape (1, number of examples)\n",
    "    \n",
    "    Returns:\n",
    "    grads -- python dictionary containing your gradients with respect to different parameters\n",
    "    \"\"\"\n",
    "    m = X.shape[1]\n",
    "    \n",
    "    # First, retrieve W1 and W2 from the dictionary \"parameters\".\n",
    "    ### START CODE HERE ### (≈ 2 lines of code)\n",
    "    W1 = None\n",
    "    W2 = None\n",
    "    ### END CODE HERE ###\n",
    "        \n",
    "    # Retrieve also A1 and A2 from dictionary \"cache\".\n",
    "    ### START CODE HERE ### (≈ 2 lines of code)\n",
    "    A1 = None\n",
    "    A2 = None\n",
    "    ### END CODE HERE ###\n",
    "    \n",
    "    # Backward propagation: calculate dW1, db1, dW2, db2. \n",
    "    ### START CODE HERE ### (≈ 6 lines of code, corresponding to 6 equations on slide above)\n",
    "    dZ2 = None\n",
    "    dW2 = None\n",
    "    db2 = None\n",
    "    dZ1 = None\n",
    "    dW1 = None\n",
    "    db1 = None\n",
    "    ### END CODE HERE ###\n",
    "    \n",
    "    grads = {\"dW1\": dW1,\n",
    "             \"db1\": db1,\n",
    "             \"dW2\": dW2,\n",
    "             \"db2\": db2}\n",
    "    \n",
    "    return grads"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "parameters, cache, X_assess, Y_assess = backward_propagation_test_case()\n",
    "\n",
    "grads = backward_propagation(parameters, cache, X_assess, Y_assess)\n",
    "print (\"dW1 = \"+ str(grads[\"dW1\"]))\n",
    "print (\"db1 = \"+ str(grads[\"db1\"]))\n",
    "print (\"dW2 = \"+ str(grads[\"dW2\"]))\n",
    "print (\"db2 = \"+ str(grads[\"db2\"]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Expected output**:\n",
    "\n",
    "\n",
    "\n",
    "<table style=\"width:80%\">\n",
    "  <tr>\n",
    "    <td>**dW1**</td>\n",
    "    <td> [[ 0.01018708 -0.00708701]\n",
    " [ 0.00873447 -0.0060768 ]\n",
    " [-0.00530847  0.00369379]\n",
    " [-0.02206365  0.01535126]] </td> \n",
    "  </tr>\n",
    "  \n",
    "  <tr>\n",
    "    <td>**db1**</td>\n",
    "    <td>  [[-0.00069728]\n",
    " [-0.00060606]\n",
    " [ 0.000364  ]\n",
    " [ 0.00151207]] </td> \n",
    "  </tr>\n",
    "  \n",
    "  <tr>\n",
    "    <td>**dW2**</td>\n",
    "    <td> [[ 0.00363613  0.03153604  0.01162914 -0.01318316]] </td> \n",
    "  </tr>\n",
    "  \n",
    "\n",
    "  <tr>\n",
    "    <td>**db2**</td>\n",
    "    <td> [[ 0.06589489]] </td> \n",
    "  </tr>\n",
    "  \n",
    "</table>  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Question**: Implement the update rule. Use gradient descent. You have to use (dW1, db1, dW2, db2) in order to update (W1, b1, W2, b2).\n",
    "\n",
    "**General gradient descent rule**: $ \\theta = \\theta - \\alpha \\frac{\\partial J }{ \\partial \\theta }$ where $\\alpha$ is the learning rate and $\\theta$ represents a parameter.\n",
    "\n",
    "**Illustration**: The gradient descent algorithm with a good learning rate (converging) and a bad learning rate (diverging). Images courtesy of Adam Harley.\n",
    "\n",
    "<img src=\"images/sgd.gif\" style=\"width:400;height:400;\"> <img src=\"images/sgd_bad.gif\" style=\"width:400;height:400;\">\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# GRADED FUNCTION: update_parameters\n",
    "\n",
    "def update_parameters(parameters, grads, learning_rate = 1.2):\n",
    "    \"\"\"\n",
    "    Updates parameters using the gradient descent update rule given above\n",
    "    \n",
    "    Arguments:\n",
    "    parameters -- python dictionary containing your parameters \n",
    "    grads -- python dictionary containing your gradients \n",
    "    \n",
    "    Returns:\n",
    "    parameters -- python dictionary containing your updated parameters \n",
    "    \"\"\"\n",
    "    # Retrieve each parameter from the dictionary \"parameters\"\n",
    "    ### START CODE HERE ### (≈ 4 lines of code)\n",
    "    W1 = None\n",
    "    b1 = None\n",
    "    W2 = None\n",
    "    b2 = None\n",
    "    ### END CODE HERE ###\n",
    "    \n",
    "    # Retrieve each gradient from the dictionary \"grads\"\n",
    "    ### START CODE HERE ### (≈ 4 lines of code)\n",
    "    dW1 = None\n",
    "    db1 = None\n",
    "    dW2 = None\n",
    "    db2 = None\n",
    "    ## END CODE HERE ###\n",
    "    \n",
    "    # Update rule for each parameter\n",
    "    ### START CODE HERE ### (≈ 4 lines of code)\n",
    "    W1 -= None\n",
    "    b1 -= None\n",
    "    W2 -= None\n",
    "    b2 -= None\n",
    "    ### END CODE HERE ###\n",
    "    \n",
    "    parameters = {\"W1\": W1,\n",
    "                  \"b1\": b1,\n",
    "                  \"W2\": W2,\n",
    "                  \"b2\": b2}\n",
    "    \n",
    "    return parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true,
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "parameters, grads = update_parameters_test_case()\n",
    "parameters = update_parameters(parameters, grads)\n",
    "\n",
    "print(\"W1 = \" + str(parameters[\"W1\"]))\n",
    "print(\"b1 = \" + str(parameters[\"b1\"]))\n",
    "print(\"W2 = \" + str(parameters[\"W2\"]))\n",
    "print(\"b2 = \" + str(parameters[\"b2\"]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Expected Output**:\n",
    "\n",
    "\n",
    "<table style=\"width:80%\">\n",
    "  <tr>\n",
    "    <td>**W1**</td>\n",
    "    <td> [[-0.00643025  0.01936718]\n",
    " [-0.02410458  0.03978052]\n",
    " [-0.01653973 -0.02096177]\n",
    " [ 0.01046864 -0.05990141]]</td> \n",
    "  </tr>\n",
    "  \n",
    "  <tr>\n",
    "    <td>**b1**</td>\n",
    "    <td> [[ -1.02420756e-06]\n",
    " [  1.27373948e-05]\n",
    " [  8.32996807e-07]\n",
    " [ -3.20136836e-06]]</td> \n",
    "  </tr>\n",
    "  \n",
    "  <tr>\n",
    "    <td>**W2**</td>\n",
    "    <td> [[-0.01041081 -0.04463285  0.01758031  0.04747113]] </td> \n",
    "  </tr>\n",
    "  \n",
    "\n",
    "  <tr>\n",
    "    <td>**b2**</td>\n",
    "    <td> [[ 0.00010457]] </td> \n",
    "  </tr>\n",
    "  \n",
    "</table>  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.4 - Integrate parts 4.1, 4.2 and 4.3 in nn_model() ####\n",
    "\n",
    "**Question**: Build your neural network model in `nn_model()`.\n",
    "\n",
    "**Instructions**: The neural network model has to use the previous functions in the right order."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# GRADED FUNCTION: nn_model\n",
    "\n",
    "def nn_model(X, Y, n_h, num_iterations = 10000, print_cost=False):\n",
    "    \"\"\"\n",
    "    Arguments:\n",
    "    X -- dataset of shape (2, number of examples)\n",
    "    Y -- labels of shape (1, number of examples)\n",
    "    n_h -- size of the hidden layer\n",
    "    num_iterations -- Number of iterations in gradient descent loop\n",
    "    print_cost -- if True, print the cost every 1000 iterations\n",
    "    \n",
    "    Returns:\n",
    "    parameters -- parameters learnt by the model. They can then be used to predict.\n",
    "    \"\"\"\n",
    "    \n",
    "    np.random.seed(3)\n",
    "    n_x = layer_sizes(X, Y)[0]\n",
    "    n_y = layer_sizes(X, Y)[2]\n",
    "    \n",
    "    # Initialize parameters, then retrieve W1, b1, W2, b2. Inputs: \"n_x, n_h, n_y\". Outputs = \"W1, b1, W2, b2, parameters\".\n",
    "    ### START CODE HERE ### (≈ 5 lines of code)\n",
    "    parameters = None\n",
    "    W1 = None\n",
    "    b1 = None\n",
    "    W2 = None\n",
    "    b2 = None\n",
    "    ### END CODE HERE ###\n",
    "    \n",
    "    # Loop (gradient descent)\n",
    "\n",
    "    for i in range(0, num_iterations):\n",
    "         \n",
    "        ### START CODE HERE ### (≈ 4 lines of code)\n",
    "        # Forward propagation. Inputs: \"X, parameters\". Outputs: \"A2, cache\".\n",
    "        A2, cache = None\n",
    "        \n",
    "        # Cost function. Inputs: \"A2, Y, parameters\". Outputs: \"cost\".\n",
    "        cost = None\n",
    " \n",
    "        # Backpropagation. Inputs: \"parameters, cache, X, Y\". Outputs: \"grads\".\n",
    "        grads = None\n",
    " \n",
    "        # Gradient descent parameter update. Inputs: \"parameters, grads\". Outputs: \"parameters\".\n",
    "        parameters = None\n",
    "        \n",
    "        ### END CODE HERE ###\n",
    "        \n",
    "        # Print the cost every 1000 iterations\n",
    "        if print_cost and i % 1000 == 0:\n",
    "            print (\"Cost after iteration %i: %f\" %(i, cost))\n",
    "\n",
    "    return parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "X_assess, Y_assess = nn_model_test_case()\n",
    "\n",
    "parameters = nn_model(X_assess, Y_assess, 4, num_iterations=10000, print_cost=False)\n",
    "print(\"W1 = \" + str(parameters[\"W1\"]))\n",
    "print(\"b1 = \" + str(parameters[\"b1\"]))\n",
    "print(\"W2 = \" + str(parameters[\"W2\"]))\n",
    "print(\"b2 = \" + str(parameters[\"b2\"]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Expected Output**:\n",
    "\n",
    "<table style=\"width:90%\">\n",
    "  <tr>\n",
    "    <td>**W1**</td>\n",
    "    <td> [[-4.18494056  5.33220609]\n",
    " [-7.52989382  1.24306181]\n",
    " [-4.1929459   5.32632331]\n",
    " [ 7.52983719 -1.24309422]]</td> \n",
    "  </tr>\n",
    "  \n",
    "  <tr>\n",
    "    <td>**b1**</td>\n",
    "    <td> [[ 2.32926819]\n",
    " [ 3.79458998]\n",
    " [ 2.33002577]\n",
    " [-3.79468846]]</td> \n",
    "  </tr>\n",
    "  \n",
    "  <tr>\n",
    "    <td>**W2**</td>\n",
    "    <td> [[-6033.83672146 -6008.12980822 -6033.10095287  6008.06637269]] </td> \n",
    "  </tr>\n",
    "  \n",
    "\n",
    "  <tr>\n",
    "    <td>**b2**</td>\n",
    "    <td> [[-52.66607724]] </td> \n",
    "  </tr>\n",
    "  \n",
    "</table>  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.5 Predictions\n",
    "\n",
    "**Question**: Use your model to predict by building predict().\n",
    "Use forward propagation to predict results.\n",
    "\n",
    "**Reminder**: predictions = $y_{prediction} = \\mathbb 1 \\text{{activation > 0.5}} = \\begin{cases}\n",
    "      1 & \\text{if}\\ activation > 0.5 \\\\\n",
    "      0 & \\text{otherwise}\n",
    "    \\end{cases}$  \n",
    "    \n",
    "As an example, if you would like to set the entries of a matrix X to 0 and 1 based on a threshold you would do: ```X_new = (X > threshold)```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# GRADED FUNCTION: predict\n",
    "\n",
    "def predict(parameters, X):\n",
    "    \"\"\"\n",
    "    Using the learned parameters, predicts a class for each example in X\n",
    "    \n",
    "    Arguments:\n",
    "    parameters -- python dictionary containing your parameters \n",
    "    X -- input data of size (n_x, m)\n",
    "    \n",
    "    Returns\n",
    "    predictions -- vector of predictions of our model (red: 0 / blue: 1)\n",
    "    \"\"\"\n",
    "    \n",
    "    # Computes probabilities using forward propagation, and classifies to 0/1 using 0.5 as the threshold.\n",
    "    ### START CODE HERE ### (≈ 2 lines of code)\n",
    "    A2, cache = None\n",
    "    predictions = None\n",
    "    ### END CODE HERE ###\n",
    "    \n",
    "    return predictions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "parameters, X_assess = predict_test_case()\n",
    "\n",
    "predictions = predict(parameters, X_assess)\n",
    "print(\"predictions mean = \" + str(np.mean(predictions)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Expected Output**: \n",
    "\n",
    "\n",
    "<table style=\"width:40%\">\n",
    "  <tr>\n",
    "    <td>**predictions mean**</td>\n",
    "    <td> 0.666666666667 </td> \n",
    "  </tr>\n",
    "  \n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It is time to run the model and see how it performs on a planar dataset. Run the following code to test your model with a single hidden layer of $n_h$ hidden units."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true,
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "# Build a model with a n_h-dimensional hidden layer\n",
    "parameters = nn_model(X, Y, n_h = 4, num_iterations = 10000, print_cost=True)\n",
    "\n",
    "# Plot the decision boundary\n",
    "plot_decision_boundary(lambda x: predict(parameters, x.T), X, Y)\n",
    "plt.title(\"Decision Boundary for hidden layer size \" + str(4))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Expected Output**:\n",
    "\n",
    "<table style=\"width:40%\">\n",
    "  <tr>\n",
    "    <td>**Cost after iteration 9000**</td>\n",
    "    <td> 0.218607 </td> \n",
    "  </tr>\n",
    "  \n",
    "</table>\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Print accuracy\n",
    "predictions = predict(parameters, X)\n",
    "print ('Accuracy: %d' % float((np.dot(Y,predictions.T) + np.dot(1-Y,1-predictions.T))/float(Y.size)*100) + '%')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Expected Output**: \n",
    "\n",
    "<table style=\"width:15%\">\n",
    "  <tr>\n",
    "    <td>**Accuracy**</td>\n",
    "    <td> 90% </td> \n",
    "  </tr>\n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Accuracy is really high compared to Logistic Regression. The model has learnt the leaf patterns of the flower! Neural networks are able to learn even highly non-linear decision boundaries, unlike logistic regression. \n",
    "\n",
    "Now, let's try out several hidden layer sizes."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.6 - Tuning hidden layer size (optional/ungraded exercise) ###\n",
    "\n",
    "Run the following code. It may take 1-2 minutes. You will observe different behaviors of the model for various hidden layer sizes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true,
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "# This may take about 2 minutes to run\n",
    "\n",
    "plt.figure(figsize=(16, 32))\n",
    "hidden_layer_sizes = [1, 2, 3, 4, 5, 10, 20]\n",
    "for i, n_h in enumerate(hidden_layer_sizes):\n",
    "    plt.subplot(5, 2, i+1)\n",
    "    plt.title('Hidden Layer of size %d' % n_h)\n",
    "    parameters = nn_model(X, Y, n_h, num_iterations = 5000)\n",
    "    plot_decision_boundary(lambda x: predict(parameters, x.T), X, Y)\n",
    "    predictions = predict(parameters, X)\n",
    "    accuracy = float((np.dot(Y,predictions.T) + np.dot(1-Y,1-predictions.T))/float(Y.size)*100)\n",
    "    print (\"Accuracy for {} hidden units: {} %\".format(n_h, accuracy))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Interpretation**:\n",
    "- The larger models (with more hidden units) are able to fit the training set better, until eventually the largest models overfit the data. \n",
    "- The best hidden layer size seems to be around n_h = 5. Indeed, a value around here seems to  fits the data well without also incurring noticable overfitting.\n",
    "- You will also learn later about regularization, which lets you use very large models (such as n_h = 50) without much overfitting. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Optional questions**:\n",
    "\n",
    "**Note**: Remember to submit the assignment but clicking the blue \"Submit Assignment\" button at the upper-right. \n",
    "\n",
    "Some optional/ungraded questions that you can explore if you wish: \n",
    "- What happens when you change the tanh activation for a sigmoid activation or a ReLU activation?\n",
    "- Play with the learning_rate. What happens?\n",
    "- What if we change the dataset? (See part 5 below!)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<font color='blue'>\n",
    "**You've learnt to:**\n",
    "- Build a complete neural network with a hidden layer\n",
    "- Make a good use of a non-linear unit\n",
    "- Implemented forward propagation and backpropagation, and trained a neural network\n",
    "- See the impact of varying the hidden layer size, including overfitting."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Nice work! "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5) Performance on other datasets"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "If you want, you can rerun the whole notebook (minus the dataset part) for each of the following datasets."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true,
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "# Datasets\n",
    "noisy_circles, noisy_moons, blobs, gaussian_quantiles, no_structure = load_extra_datasets()\n",
    "\n",
    "datasets = {\"noisy_circles\": noisy_circles,\n",
    "            \"noisy_moons\": noisy_moons,\n",
    "            \"blobs\": blobs,\n",
    "            \"gaussian_quantiles\": gaussian_quantiles}\n",
    "\n",
    "### START CODE HERE ### (choose your dataset)\n",
    "dataset = \"gaussian_quantiles\"\n",
    "### END CODE HERE ###\n",
    "\n",
    "X, Y = datasets[dataset]\n",
    "X, Y = X.T, Y.reshape(1, Y.shape[0])\n",
    "\n",
    "# make blobs binary\n",
    "if dataset == \"blobs\":\n",
    "    Y = Y%2\n",
    "\n",
    "# Visualize the data\n",
    "plt.scatter(X[0, :], X[1, :], c=Y, s=40, cmap=plt.cm.Spectral);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Congrats on finishing this Programming Assignment!\n",
    "\n",
    "Reference:\n",
    "- http://scs.ryerson.ca/~aharley/neural-networks/\n",
    "- http://cs231n.github.io/neural-networks-case-study/"
   ]
  }
 ],
 "metadata": {
  "coursera": {
   "course_slug": "neural-networks-deep-learning",
   "graded_item_id": "wRuwL",
   "launcher_item_id": "NI888"
  },
  "kernelspec": {
   "display_name": "Python [default]",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
